package temp

//
//import (
//	"black_mamba/global"
//	"gitee.com/wengo/go-amazon"
//
//	"fmt"
//	"gitee.com/wengo/go-mamba"
//	"github.com/PuerkitoBio/goquery"
//	"github.com/tidwall/gjson"
//	"io/ioutil"
//)
//
//type TaskOptions struct {
//	amz *amazon.Amazon
//	Asin string
//	SellerId string
//}
//
//type BDCheckoutWorker struct {
//	Worker
//}
//
//func NewBDCheckoutWorker() *BDCheckoutWorker {
//	return &BDCheckoutWorker{}
//}
//
////func (b *BDCheckoutWorker) AddCartThread(data interface{}) {
//func (b *BDCheckoutWorker) AddCartThread(data map[string]interface{}) {
//	amz := data["amz"].(*amazon.Amazon)
//	asin := data["asin"].(string)
//	quantity := data["quantity"].(int)
//	sellerId := data["seller_id"].(string)
//
//	//taskOptions := data.(TaskOptions)
//
//	//amz := taskOptions.amz
//	//asin := taskOptions.Asin
//	//sellerId := taskOptions.SellerId
//
//	// 打开Listing
//	b.sendLog(map[string]string{"status": "info", "content": fmt.Sprintf("查看 %s listing", asin)})
//	_, document, err := amz.Navigate(fmt.Sprintf("/dp/%s/ref=sr_1_2?m=%s&sr=1-1", asin, sellerId))
//	if err != nil {
//		b.sendLog(map[string]string{"status": "error", "content": err.Error()})
//		return
//	}
//
//	html, _ := document.Html()
//	ioutil.WriteFile(fmt.Sprintf("%s.html", asin), []byte(html), 0644)
//
//	if !amz.CheckListingHasCart(document) {
//		b.sendLog(map[string]string{"status": "error", "content": fmt.Sprintf("%s 没有购物车按钮，不加购", asin)})
//		return
//	}
//
//	// 加入购物车
//	document, err = amz.AddCart(document, quantity)
//	if err != nil {
//		b.sendLog(map[string]string{"status": "error", "content": fmt.Sprintf("%s 加入购物车失败", asin)})
//		return
//	}
//
//	if !amz.CheckAddCartSuccess(document) {
//		b.sendLog(map[string]string{"status": "error", "content": fmt.Sprintf("%s 加入购物车失败", asin)})
//		html, _ = document.Html()
//		ioutil.WriteFile(fmt.Sprintf("%s-addcart.html", asin), []byte(html), 0644)
//		return
//	} else {
//		b.sendLog(map[string]string{"status": "info", "content": fmt.Sprintf("%s 加入购物车成功", asin)})
//	}
//
//
//}
//
//func (b *BDCheckoutWorker) Execute(data map[string]interface{}) {
//	/*
//		   流程
//		    1.访问首页
//			2.新建收货地址，新建信用卡
//			3.打开Listing
//			4.加入购物车
//			5.结账
//			6.选择地址
//			7.选择信用卡
//			8.建立订单
//	*/
//
//
//	var resp *mamba.Response
//	var document *goquery.Document
//	var err error
//
//	// 获取cookies
//	b.sendLog(map[string]string{"status": "info", "content": "获取账户信息"})
//	user, err := global.BM_API.GetCookies("us")
//
//	if err != nil {
//		b.sendLog(map[string]string{"status": "error", "content": "获取用户信息失败"})
//		return
//	}
//
//	b.sendLog(map[string]string{"status": "info", "content": fmt.Sprintf("邮箱地址 -> %s", user.Account.Emailaddress)})
//	b.sendLog(map[string]string{"status": "info", "content": fmt.Sprintf("用户密码 -> %s", user.Account.Password)})
//	b.sendLog(map[string]string{"status": "info", "content": user.Account.Cookies})
//
//	amz := amazon.NewAmazon(amazon.Settings{
//		JA3:         "771,4865-4866-4867-49195-49199-49196-49200-52393-52392-49171-49172-156-157-47-53,0-23-65281-10-11-35-16-5-13-18-51-45-43-27-21,29-23-24,0",
//		UserAgent:   "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/100.0.4896.127 Safari/537.36",
//		BaseUri:     "https://www.amazon.com",
//		Header:      nil,
//		Cookies:     user.HttpCookies,
//		Debug:       false,
//		DebugLength: 0,
//		Proxy: fmt.Sprintf("http://%s:%s@http-dynamic.xiaoxiangdaili.com:10030", "827392040156680192", "AURz6KOT"),
//	})
//
//	//打开首页
//	b.sendLog(map[string]string{"status": "info", "content": "打开首页"})
//	resp, document, err = amz.Navigate("/")
//
//	if err != nil {
//		//fmt.Errorf
//		b.sendLog(map[string]string{"status": "error", "content": err.Error()})
//		return
//	}
//
//	resp, err = amz.ChangeAddress(document)
//	if err != nil {
//		b.sendLog(map[string]string{"status": "error", "content": err.Error()})
//		return
//	} else {
//		b.sendLog(map[string]string{"status": "info", "content": fmt.Sprintf("已把地址修改为: %s %s", gjson.Get(resp.String(), "address.city").String(), gjson.Get(resp.String(), "address.zipCode").String())})
//	}
//
//	// 测试是否需要登录
//	b.sendLog(map[string]string{"status": "info", "content": "测试是否需要登录"})
//	resp, document, err = amz.Navigate(amazon.AddressBook)
//	if err != nil {
//		b.sendLog(map[string]string{"status": "error", "content": err.Error()})
//		return
//	}
//
//	// 是否需要登录
//	if amz.IsNeedLogin(resp.RawResponse.Request.URL.String()) {
//		b.sendLog(map[string]string{"status": "info", "content": "开始登录"})
//		resp, document, err = amz.Login(user.Account.Emailaddress, user.Account.Password, document)
//		if err != nil {
//			b.sendLog(map[string]string{"status": "error", "content": err.Error()})
//			return
//		}
//	}
//
//	// 是否需要输入手机号
//	if amz.IsNeedAccountFixup(resp.RawResponse.Request.URL.String()) {
//		b.sendLog(map[string]string{"status": "info", "content": "跳过绑定手机"})
//		document, err = amz.AccountFixup(document)
//		if err != nil {
//			b.sendLog(map[string]string{"status": "error", "content": err.Error()})
//			return
//		}
//	}
//
//	// 循环下单，直到账户需要登录
//	for count := 1; count <= 3; count ++{
//		b.sendLog(map[string]string{"status": "info", "content": fmt.Sprintf("%s 第 %d 次购买开始", user.Account.Emailaddress, count)})
//		// 并发加购多个产品
//		taskList := gjson.Get(data["tasks"].(string), "list").Array()
//		total := len(taskList)
//		quantity := 999 / total
//		for _, task := range gjson.Get(data["tasks"].(string), "list").Array() {
//			asin := gjson.Get(task.String(), "asin.value").String()
//			sellerId := gjson.Get(task.String(), "seller_id.value").String()
//
//			//quantity, _ := strconv.Atoi(task["quantity"])
//			//amzObject := amz
//			//taskOptions := TaskOptions{
//			//	amz:      amzObject,
//			//	Asin:     asin,
//			//	SellerId: sellerId,
//			//}
//
//			//global.BM_POOL.Submit(b.Decorator(b.AddCartThread, map[string]interface{}{
//			//	"task": "",
//			//	"asin": asin,
//			//	"seller_id": sellerId,
//			//	"quantity": quantity,
//			//	"amz": amz,
//			//	//"logCallBack": b.updateLog,
//			//}))
//
//			// 打开跟卖
//			b.sendLog(map[string]string{"status": "info", "content": "打开跟卖商家"})
//			document, err = amz.GetOfferListing(asin)
//			if err != nil {
//				b.sendLog(map[string]string{"status": "error", "content": err.Error()})
//				return
//			}
//
//			// 加入购物车
//			b.sendLog(map[string]string{"status": "info", "content": "加入购物车"})
//			_, err := amz.AddCartByOffers(document, asin, sellerId, quantity)
//			if err != nil {
//				b.sendLog(map[string]string{"status": "error", "content": err.Error()})
//				return
//			}
//
//			// 打开Listing, 从listing加购方式, 旧版本
//			/*b.sendLog(map[string]string{"status": "info", "content": fmt.Sprintf("查看 %s listing", asin)})
//			_, document, err = amz.Navigate(fmt.Sprintf("/dp/%s/ref=sr_1_2?m=%s&sr=1-1", asin, sellerId))
//			if err != nil {
//				b.sendLog(map[string]string{"status": "error", "content": err.Error()})
//				return
//			}
//
//			if !amz.CheckListingHasCart(document) {
//				html, _ := document.Html()
//				ioutil.WriteFile(fmt.Sprintf("%s.html", asin), []byte(html), 0644)
//				b.sendLog(map[string]string{"status": "error", "content": fmt.Sprintf("%s 没有购物车按钮，不加购", asin)})
//				return
//			}
//
//			// 加入购物车
//			document, err = amz.AddCart(document, quantity)
//			if err != nil {
//				b.sendLog(map[string]string{"status": "error", "content": fmt.Sprintf("%s 加入购物车失败", asin)})
//				return
//			}
//
//			if !amz.CheckAddCartSuccess(document) {
//				b.sendLog(map[string]string{"status": "error", "content": fmt.Sprintf("%s 加入购物车失败", asin)})
//				//html, _ = document.Html()
//				//ioutil.WriteFile(fmt.Sprintf("%s-addcart.html", asin), []byte(html), 0644)
//				return
//			} else {
//				b.sendLog(map[string]string{"status": "info", "content": fmt.Sprintf("%s 加入购物车成功", asin)})
//			}*/
//
//			//global.BM_POOL.Submit(b.Decorator(b.AddCartThread, taskOptions))
//
//			//taskOptions := data.(TaskOptions)
//
//			//amz := taskOptions.amz
//			//asin := taskOptions.Asin
//			//sellerId := taskOptions.SellerId
//		}
//
//		//b.Wg.Wait()
//
//		// 打开购物车页面
//		b.sendLog(map[string]string{"status": "info", "content": "打开购物车页"})
//		_, document, err = amz.Navigate(`/gp/cart/view.html?ref_=nav_cart`)
//		if err != nil {
//			b.sendLog(map[string]string{"status": "error", "content": err.Error()})
//			return
//		}
//
//		// checkout
//		b.sendLog(map[string]string{"status": "info", "content": "开始结账"})
//		resp, document, err = amz.Checkout(document)
//		if err != nil {
//			b.sendLog(map[string]string{"status": "error", "content": err.Error()})
//			return
//		}
//
//		// select shipping address
//		if amz.IsSelectAddressPage(document) {
//			// 如果可以选择收货地址，直接选择，不需要填写
//			if amz.CanSelectAddress(document) {
//				b.sendLog(map[string]string{"status": "info", "content": "选择收货地址"})
//				document, _ = amz.SelectAddress(document)
//			} else { // 提交收货地址
//				// 获取地址信息
//				b.sendLog(map[string]string{"status": "info", "content": "添加收货地址"})
//				suggestions, err := amz.AddressSuggestion()
//				if err != nil {
//					b.sendLog(map[string]string{"status": "error", "content": err.Error()})
//					return
//				}
//				suggestions.Phone = user.Address.Phone
//				suggestions.Recipient = user.Address.Recipient
//				document, err = amz.SubmitCheckoutAddress(suggestions, document)
//				if err != nil {
//					b.sendLog(map[string]string{"status": "error", "content": err.Error()})
//					return
//				}
//			}
//		} else {
//			b.sendLog(map[string]string{"status": "info", "content": "无需选择收货地址"})
//		}
//
//		// selelct payment method
//		if amz.IsSelectPaymentMethodPage(document) {
//			// 如果可以选择信用卡，直接选择，不需要填写
//			if amz.CanSelectCreditCard(document) {
//				b.sendLog(map[string]string{"status": "info", "content": "选择信用卡"})
//				document, err = amz.SelectPaymentMethod(document)
//			} else { // 提交信用卡
//				b.sendLog(map[string]string{"status": "info", "content": "获取信用卡表单"})
//				document, err = amz.GetCheckOutCreditCardForm(document)
//				if err != nil {
//					b.sendLog(map[string]string{"status": "error", "content": err.Error()})
//					return
//				}
//				b.sendLog(map[string]string{"status": "info", "content": fmt.Sprintf("提交信用卡信息 => %s, %s", user.CreditCard.CardNo, user.CreditCard.ValidPeriod)})
//				resp, err = amz.SubmitCheckoutCreditCard(user.Address.Recipient, user.CreditCard.CardNo, user.CreditCard.ValidPeriod, document)
//				if err != nil {
//					ccFormHtml, _ := document.Html()
//					ioutil.WriteFile("cc-error-form.html", []byte(ccFormHtml), 0644)
//					b.sendLog(map[string]string{"status": "error", "content": err.Error()})
//					return
//				} else {
//					b.sendLog(map[string]string{"status": "info", "content": resp.String()})
//				}
//
//				resp, document, err = amz.Navigate(`/gp/buy/payselect/handlers/display.html?hasWorkingJavascript=1`)
//				if err != nil {
//					b.sendLog(map[string]string{"status": "error", "content": err.Error()})
//					return
//				}
//				document, err = amz.SelectPaymentMethod(document)
//				if err != nil {
//					b.sendLog(map[string]string{"status": "error", "content": err.Error()})
//				}
//			}
//		} else {
//			b.sendLog(map[string]string{"status": "info", "content": "不是信用卡页面"})
//		}
//
//		if amz.IsSelectAddressPage(document) {
//			b.sendLog(map[string]string{"status": "info", "content": "选择账单地址"})
//			document, err = amz.SelectAddress(document)
//			if err != nil {
//				b.sendLog(map[string]string{"status": "error", "content": err.Error()})
//				return
//			}
//		}
//
//
//		if amz.IsPrimePage(document) {
//			b.sendLog(map[string]string{"status": "info", "content": "不需要Prime"})
//			document, err = amz.NotNeedPrime(document)
//			if err != nil {
//				b.sendLog(map[string]string{"status": "error", "content": err.Error()})
//				return
//			}
//		}
//
//		// 建立订单
//		if amz.IsPlaceOrderdPage(document) {
//			b.sendLog(map[string]string{"status": "info", "content": "确认下单"})
//			document, err = amz.PlaceOrder(document)
//			if err != nil {
//				b.sendLog(map[string]string{"status": "error", "content": err.Error()})
//				return
//			}
//
//			resp, document, err = amz.CompleteOrder(document)
//			if amz.IsNeedConfirmOrder(document) {
//				b.sendLog(map[string]string{"status": "info", "content": "需要确认订单"})
//				document, err = amz.ConfirmOrder(document)
//				if err != nil {
//					b.sendLog(map[string]string{"status": "error", "content": "确认订单失败"})
//					return
//				} else {
//					b.sendLog(map[string]string{"status": "info", "content": "确认下重复订单"})
//				}
//			}
//
//			resp, document, _ = amz.Navigate(amazon.OrderHistory)
//		} else {
//			b.sendLog(map[string]string{"status": "error", "content": fmt.Sprintf("%s 第%d次 下单不成功", user.Account.Emailaddress, count)})
//			if count == 1 {
//				html, _ := document.Html()
//				ioutil.WriteFile(fmt.Sprintf(`%s-%s-error.html`, user.Account.Emailaddress, user.CreditCard.CardNo), []byte(html), 0644)
//			}
//		}
//
//		if !amz.IsNeedLogin(resp.RawResponse.Request.URL.String()) {
//			orderId := amz.ExtractOrderId(document)
//			b.sendLog(map[string]string{"status": "success", "content": fmt.Sprintf("%s 的第 %d 次订单号:%s, 信用卡: %s", user.Account.Emailaddress, count, orderId, user.CreditCard.CardNo)})
//		} else {
//			b.sendLog(map[string]string{"status": "error", "content": "下单完毕后需要登录"})
//			return
//		}
//
//		//html, _ := document.Html()
//		//ioutil.WriteFile(fmt.Sprintf("finnal-%s.html", user.Account.Emailaddress), []byte(html), 0644)
//		//ioutil.WriteFile(fmt.Sprintf("finnal-%s-%d.html", user.Account.Emailaddress, time.Now().UnixNano()), []byte(html), 0644)
//
//	}
//}
